package shujia.day14.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/*
    JDBC: 使用java语言连接数据库【任意数据库】。
    使用JDBC连接mysql。

    java之父开发的时候，其实并不知道将来java语言会被用作连接什么数据库，所以java之父并没有在jdk中做出具体的数据库连接实现。
    java之父在jdk中提供了一些接口和抽象方法以及工具类，将来什么数据库想要使用java连接，那么这个数据库开发团队，可以实现这些接口
    或继承这些类，在自己的类中实现对对应的数据库做操作。

    要想在自己的项目中使用java操作mysql数据库，就需要去到mysql的官网中下载，mysql开发团队开发好的jar包，包中含有对应的实现类
    这些实现类就是用于操作mysql的。

    mysql今后常见的版本：mysql5.7.x   mysql8.0.x
    驱动包常见版本：     5.1.xx【mysql5.7.x】      8.0.xx【mysql5.7.x， mysql8.0.x】

    如何在自己的java程序中使用xxx驱动包？【如何使用jdbc】
    6步骤：
        1、加载驱动类
        2、创建数据库连接对象
        3、创建数据库操作对象
        4、执行sql语句
            1）增删改
            2）查询
        5、如果第4步是查询的话，分析查询结果
        6、释放与数据库的连接资源

 */
public class JDBCDemo1 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement state = null;
        try {
            //1、加载驱动类
            // mysql驱动包5.1.xx版本中驱动类的路径：com.mysql.jdbc.Driver
            // mysql驱动包8.0.xx版本中驱动类的路径：com.mysql.cj.jdbc.Driver
            Class.forName("com.mysql.jdbc.Driver");

            //2、创建数据库连接对象
            //public static Connection getConnection(String url,String user, String password)
            /*
                url: 指定要连接的mysql服务地址以及数据库名
                    jdbc:mysql://master:3306/bigdata33?useUnicode=true&characterEncoding=utf-8
             */
            String url = "jdbc:mysql://master:3306/bigdata33?useUnicode=true&characterEncoding=utf-8&useSSL=false";
            String username = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url, username, password);
//            System.out.println("conn: " + conn);

            //3、创建数据库操作对象
            state = conn.createStatement();

            //4、执行sql语句
//            state.executeUpdate(); // 增删改
            /*
                增加操作
             */
//            int i = state.executeUpdate("insert into students(name,email,age,address) values('张成阳','12341@qq.com',17,'安徽阜阳')");
//            System.out.println(i);
            /*
                删除操作
             */
//            state.executeUpdate("delete from students where name='张成阳'");

            /*
                修改操作
             */
//            state.executeUpdate("update students set age=24 where name='张三'");

//            state.executeQuery();  // 查询操作
            ResultSet resultSet = state.executeQuery("select id,name,email,age,address from students where age>=19");
//            System.out.println(resultSet);

            //5、如果第4步是查询的话，分析查询结果
            //每调用一次next方法，光标向下移动一条，若还有数据，返回true，反之返回false
            while (resultSet.next()){
                //获取当前行的每一列数据
                //方式1：已知列名的情况下，可以根据列名获取每一列的数据
//                int id = resultSet.getInt("id");
//                String name = resultSet.getString("name");
//                String email = resultSet.getString("email");
//                int age = resultSet.getInt("age");
//                String address = resultSet.getString("address");
//                System.out.println(id+","+name+","+email+","+age+","+address);

                //方式2：可以根据索引获取元素 从1开始
                String id = resultSet.getString(1);
                String name = resultSet.getString(2);
                String email = resultSet.getString(3);
                String age = resultSet.getString(4);
                String address = resultSet.getString(5);
                System.out.println(id+","+name+","+email+","+age+","+address);
            }



        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(state!=null){
                    state.close();
                }

                if(conn!=null){
                    conn.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}
